home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / hplip / ui4 / filetable.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2009-10-28  |  13KB  |  351 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import sys
  5. import os.path as os
  6. import os
  7. from base.g import *
  8. from base import utils, magic
  9. from prnt import cups
  10. from base.codes import *
  11. from ui_utils import *
  12. from PyQt4.QtCore import *
  13. from PyQt4.QtGui import *
  14. from mimetypesdialog import MimeTypesDialog
  15. FILETABLE_TYPE_PRINT = 0
  16. FILETABLE_TYPE_FAX = 1
  17.  
  18. class FileTable(QWidget):
  19.     
  20.     def __init__(self, parent):
  21.         QWidget.__init__(self, parent)
  22.         self.parent = parent
  23.         self.initUi()
  24.         self.file_list = []
  25.         self.typ = FILETABLE_TYPE_PRINT
  26.         self.selected_filename = None
  27.         self.fax_add_callback = None
  28.         self.allowable_mime_types = cups.getAllowableMIMETypes()
  29.         self.user_settings = UserSettings()
  30.         self.user_settings.load()
  31.         self.user_settings.debug()
  32.         self.working_dir = self.user_settings.working_dir
  33.  
  34.     
  35.     def initUi(self):
  36.         self.gridlayout = QGridLayout(self)
  37.         self.gridlayout.setObjectName('gridlayout')
  38.         self.FileTable = QTableWidget(self)
  39.         self.FileTable.setObjectName('FileTable')
  40.         self.gridlayout.addWidget(self.FileTable, 0, 0, 1, 6)
  41.         self.AddFileButton = QPushButton(self)
  42.         self.AddFileButton.setObjectName('AddFileButton')
  43.         self.gridlayout.addWidget(self.AddFileButton, 1, 0, 1, 1)
  44.         self.RemoveFileButton = QPushButton(self)
  45.         self.RemoveFileButton.setObjectName('RemoveFileButton')
  46.         self.gridlayout.addWidget(self.RemoveFileButton, 1, 1, 1, 1)
  47.         self.MoveFileUpButton = QPushButton(self)
  48.         self.MoveFileUpButton.setObjectName('MoveFileUpButton')
  49.         self.gridlayout.addWidget(self.MoveFileUpButton, 1, 2, 1, 1)
  50.         self.MoveFileDownButton = QPushButton(self)
  51.         self.MoveFileDownButton.setObjectName('MoveFileDownButton')
  52.         self.gridlayout.addWidget(self.MoveFileDownButton, 1, 3, 1, 1)
  53.         spacerItem = QSpacerItem(91, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
  54.         self.gridlayout.addItem(spacerItem, 1, 4, 1, 1)
  55.         self.ShowTypesButton = QPushButton(self)
  56.         self.ShowTypesButton.setObjectName('ShowTypesButton')
  57.         self.gridlayout.addWidget(self.ShowTypesButton, 1, 5, 1, 1)
  58.         self.AddFileButton.setText(self._FileTable__tr('Add...'))
  59.         self.AddFileButton.setIcon(QIcon(load_pixmap('list_add', '16x16')))
  60.         self.connect(self.AddFileButton, SIGNAL('clicked()'), self.AddFileButton_clicked)
  61.         self.RemoveFileButton.setIcon(QIcon(load_pixmap('list_remove', '16x16')))
  62.         self.RemoveFileButton.setText(self._FileTable__tr('Remove'))
  63.         self.connect(self.RemoveFileButton, SIGNAL('clicked()'), self.RemoveFileButton_clicked)
  64.         self.MoveFileUpButton.setText(self._FileTable__tr('Move Up'))
  65.         self.MoveFileUpButton.setIcon(QIcon(load_pixmap('up', '16x16')))
  66.         self.connect(self.MoveFileUpButton, SIGNAL('clicked()'), self.MoveFileUpButton_clicked)
  67.         self.MoveFileDownButton.setText(self._FileTable__tr('Move Down'))
  68.         self.MoveFileDownButton.setIcon(QIcon(load_pixmap('down', '16x16')))
  69.         self.connect(self.MoveFileDownButton, SIGNAL('clicked()'), self.MoveFileDownButton_clicked)
  70.         self.ShowTypesButton.setText(self._FileTable__tr('Show Valid Types...'))
  71.         self.ShowTypesButton.setIcon(QIcon(load_pixmap('mimetypes', '16x16')))
  72.         self.connect(self.ShowTypesButton, SIGNAL('clicked()'), self.ShowTypesButton_clicked)
  73.         self.FileTable.setContextMenuPolicy(Qt.CustomContextMenu)
  74.         self.connect(self.FileTable, SIGNAL('customContextMenuRequested(const QPoint &)'), self.FileTable_customContextMenuRequested)
  75.         self.headers = [
  76.             self._FileTable__tr('Name'),
  77.             self._FileTable__tr('Type'),
  78.             self._FileTable__tr('Folder/Path')]
  79.         self.FileTable.setSortingEnabled(False)
  80.         self.connect(self.FileTable, SIGNAL('itemSelectionChanged()'), self.FileTable_itemSelectionChanged)
  81.  
  82.     
  83.     def setWorkingDir(self, d):
  84.         if os.path.exists(d):
  85.             self.working_dir = d
  86.         
  87.  
  88.     
  89.     def getWorkingDir(self):
  90.         if self.file_list:
  91.             self.working_dir = os.path.pathname(self.file_list[0][0])
  92.             self.user_settings.working_dir = self.working_dir
  93.             self.user_settings.save()
  94.         
  95.         return self.working_dir
  96.  
  97.     
  98.     def setType(self, t):
  99.         self.typ = t
  100.         if self.typ == FILETABLE_TYPE_FAX:
  101.             self.headers = [
  102.                 self._FileTable__tr('Name'),
  103.                 self._FileTable__tr('Type'),
  104.                 self._FileTable__tr('Pages')]
  105.             if log.is_debug():
  106.                 self.headers.append(self._FileTable__tr('File'))
  107.             
  108.         
  109.  
  110.     
  111.     def setFaxCallback(self, callback):
  112.         self.fax_add_callback = callback
  113.  
  114.     
  115.     def isNotEmpty(self):
  116.         return len(self.file_list)
  117.  
  118.     
  119.     def FileTable_itemSelectionChanged(self):
  120.         self.selected_filename = self.currentFilename()
  121.         self.setUpDownButtons()
  122.  
  123.     
  124.     def updateUi(self, show_add_file_if_empty = True):
  125.         self.FileTable.clear()
  126.         self.FileTable.setRowCount(len(self.file_list))
  127.         self.FileTable.setColumnCount(0)
  128.         if self.file_list:
  129.             self.emit(SIGNAL('isNotEmpty'))
  130.             QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
  131.             
  132.             try:
  133.                 selected = None
  134.                 self.FileTable.setColumnCount(len(self.headers))
  135.                 self.FileTable.setHorizontalHeaderLabels(self.headers)
  136.                 flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled
  137.                 for row, f in enumerate(self.file_list):
  138.                     (filename, mime_type, mime_type_desc, title, num_pages) = f
  139.                     col = 0
  140.                     if self.typ == FILETABLE_TYPE_FAX:
  141.                         if title:
  142.                             i = QTableWidgetItem(title)
  143.                         else:
  144.                             i = QTableWidgetItem(os.path.basename(filename))
  145.                     else:
  146.                         i = QTableWidgetItem(os.path.basename(filename))
  147.                     i.setData(Qt.UserRole, QVariant(filename))
  148.                     i.setFlags(flags)
  149.                     if self.selected_filename is not None and self.selected_filename == filename:
  150.                         selected = i
  151.                     
  152.                     self.FileTable.setItem(row, col, i)
  153.                     col += 1
  154.                     i = QTableWidgetItem(mime_type_desc)
  155.                     i.setFlags(flags)
  156.                     self.FileTable.setItem(row, col, i)
  157.                     col += 1
  158.                     if self.typ == FILETABLE_TYPE_PRINT:
  159.                         i = QTableWidgetItem(os.path.dirname(filename))
  160.                         i.setFlags(flags)
  161.                         self.FileTable.setItem(row, col, i)
  162.                         col += 1
  163.                     
  164.                     if self.typ == FILETABLE_TYPE_FAX:
  165.                         if num_pages < 1:
  166.                             i = QTableWidgetItem(self._FileTable__tr('(unknown)'))
  167.                         else:
  168.                             i = QTableWidgetItem(unicode(num_pages))
  169.                         i.setFlags(flags)
  170.                         self.FileTable.setItem(row, col, i)
  171.                         col += 1
  172.                         if self.typ == FILETABLE_TYPE_FAX and log.is_debug():
  173.                             i = QTableWidgetItem(filename)
  174.                             i.setFlags(flags)
  175.                             self.FileTable.setItem(row, col, i)
  176.                         
  177.                     log.is_debug()
  178.                 
  179.                 self.FileTable.resizeColumnsToContents()
  180.                 if selected is None:
  181.                     selected = self.FileTable.item(0, 0)
  182.                 
  183.                 selected.setSelected(True)
  184.                 self.FileTable.setCurrentItem(selected)
  185.             finally:
  186.                 QApplication.restoreOverrideCursor()
  187.  
  188.             self.RemoveFileButton.setEnabled(True)
  189.             self.RemoveFileButton.setIcon(QIcon(load_pixmap('list_remove', '16x16')))
  190.             self.setUpDownButtons()
  191.         else:
  192.             self.emit(SIGNAL('isEmpty'))
  193.             self.RemoveFileButton.setEnabled(False)
  194.             self.setUpDownButtons()
  195.             if show_add_file_if_empty:
  196.                 self.AddFileButton.emit(SIGNAL('clicked()'))
  197.             
  198.  
  199.     
  200.     def setUpDownButtons(self):
  201.         if self.file_list:
  202.             i = self.FileTable.currentRow()
  203.             if len(self.file_list) > 1 and i != len(self.file_list) - 1:
  204.                 self.MoveFileDownButton.setEnabled(True)
  205.             else:
  206.                 self.MoveFileDownButton.setEnabled(False)
  207.             if len(self.file_list) > 1 and i != 0:
  208.                 self.MoveFileUpButton.setEnabled(True)
  209.             else:
  210.                 self.MoveFileUpButton.setEnabled(False)
  211.         else:
  212.             self.MoveFileDownButton.setEnabled(False)
  213.             self.MoveFileUpButton.setEnabled(False)
  214.  
  215.     
  216.     def AddFileButton_clicked(self):
  217.         if self.typ == FILETABLE_TYPE_PRINT:
  218.             s = self._FileTable__tr('Select File(s) to Print')
  219.         else:
  220.             s = self._FileTable__tr('Select File(s) to Send')
  221.         files = list(QFileDialog.getOpenFileNames(self, s, self.working_dir, self._FileTable__tr('All files (*)')))
  222.         files = [ unicode(f) for f in files ]
  223.  
  224.     
  225.     def addFileList(self, file_list):
  226.         for f in file_list:
  227.             self.addFileFromUI(f)
  228.         
  229.  
  230.     
  231.     def addFileFromUI(self, f, title = '', num_pages = 0):
  232.         f = os.path.abspath(os.path.expanduser(f))
  233.         log.debug('Trying to add file: %s' % f)
  234.         if os.path.exists(f) and os.access(f, os.R_OK):
  235.             mime_type = magic.mime_type(f)
  236.             mime_type_desc = mime_type
  237.             log.debug('File type of file %s: %s' % (f, mime_type))
  238.             
  239.             try:
  240.                 mime_type_desc = MIME_TYPES_DESC[mime_type][0]
  241.             except KeyError:
  242.                 if self.typ == FILETABLE_TYPE_PRINT:
  243.                     FailureUI(self, self._FileTable__tr("<b>You are trying to add a file '%1' that cannot be directly printed with this utility.</b><p>To print this file, use the print command in the application that created it.<p>Note: Click <i>Show Valid Types...</i> to view a list of compatible file types that can be directly printed from this utility.").arg(f), self._FileTable__tr('HP Device Manager'))
  244.                 else:
  245.                     FailureUI(self, self._FileTable__tr("<b>You are trying to add a file '%1' that cannot be directly faxed with this utility.</b><p>To fax this file, use the print command in the application that created it (using the appropriate fax print queue).<p>Note: Click <i>Show Valid Types...</i> to view a list of compatible file types that can be directly added to the fax file list in this utility.").arg(f), self._FileTable__tr('HP Device Manager'))
  246.             except:
  247.                 self.typ == FILETABLE_TYPE_PRINT
  248.  
  249.             if self.typ == FILETABLE_TYPE_PRINT:
  250.                 self.addFile(f, mime_type, mime_type_desc, title, num_pages)
  251.             else:
  252.                 self.fax_add_callback(f)
  253.         else:
  254.             FailureUI(self, self._FileTable__tr("<b>Unable to add file '%1' to file list (file not found or insufficient permissions).</b><p>Check the file name and try again.").arg(f), self._FileTable__tr('HP Device Manager'))
  255.  
  256.     
  257.     def addFile(self, f, mime_type, mime_type_desc, title, num_pages):
  258.         log.debug('Adding file %s (%s,%s,%s,%d)' % (f, mime_type, mime_type_desc, title, num_pages))
  259.         self.file_list.append((f, mime_type, mime_type_desc, title, num_pages))
  260.         self.updateUi()
  261.         self.emit(SIGNAL('fileListChanged'))
  262.  
  263.     
  264.     def currentFilename(self):
  265.         i = self.FileTable.item(self.FileTable.currentRow(), 0)
  266.         if i is None:
  267.             return None
  268.         return i.data(Qt.UserRole).toString()
  269.  
  270.     
  271.     def RemoveFileButton_clicked(self):
  272.         filename = self.currentFilename()
  273.         if filename is None:
  274.             return None
  275.         return self.removeFile(filename)
  276.  
  277.     
  278.     def removeFile(self, filename):
  279.         temp = self.file_list[:]
  280.         index = 0
  281.         for f, mime_type, mime_type_desc, title, num_pages in temp:
  282.             if f == filename:
  283.                 del self.file_list[index]
  284.                 self.emit(SIGNAL('fileListChanged'))
  285.                 self.updateUi(False)
  286.                 break
  287.             
  288.             index += 1
  289.         
  290.  
  291.     
  292.     def removeFileByMIMEType(self, mime_type):
  293.         temp = self.file_list[:]
  294.         index = 0
  295.         for filename, m, mime_type_desc, title, num_pages in temp:
  296.             if m == mime_type:
  297.                 del self.file_list[index]
  298.                 self.emit(SIGNAL('fileListChanged'))
  299.                 self.updateUi(False)
  300.                 break
  301.             
  302.             index += 1
  303.         
  304.  
  305.     
  306.     def isMIMETypeInList(self, mime_type):
  307.         for filename, m, mime_type_desc, title, num_pages in self.file_list:
  308.             if m == mime_type:
  309.                 return True
  310.         
  311.         return False
  312.  
  313.     
  314.     def ShowTypesButton_clicked(self):
  315.         x = { }
  316.         for a in self.allowable_mime_types:
  317.             x[a] = MIME_TYPES_DESC.get(a, ('Unknown', 'n/a'))
  318.         
  319.         dlg = MimeTypesDialog(x, self)
  320.         dlg.exec_()
  321.  
  322.     
  323.     def MoveFileUpButton_clicked(self):
  324.         filename = self.currentFilename()
  325.         if filename is None:
  326.             return None
  327.         utils.list_move_up(self.file_list, filename, self._FileTable__compareFilenames)
  328.         self.updateUi()
  329.  
  330.     
  331.     def MoveFileDownButton_clicked(self):
  332.         filename = self.currentFilename()
  333.         if filename is None:
  334.             return None
  335.         utils.list_move_down(self.file_list, filename, self._FileTable__compareFilenames)
  336.         self.updateUi()
  337.  
  338.     
  339.     def __compareFilenames(self, a, b):
  340.         return a[0] == b
  341.  
  342.     
  343.     def FileTable_customContextMenuRequested(self, p):
  344.         print p
  345.  
  346.     
  347.     def __tr(self, s, c = None):
  348.         return qApp.translate('FileTable', s, c)
  349.  
  350.  
  351.